package com.lagou.service.impl;

import com.lagou.service.EmailService;
import org.apache.dubbo.config.annotation.Service;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

@Service
public class EmailServiceImpl implements EmailService {

    @Override
    public Boolean send(String email, String code) {
        return sendEmail(email, code);
    }

    private Boolean sendEmail(String email, String code) {
        Transport transport = null;
        try {
            // =============================================
            // 1. 连接上发送邮件的服务器
            // 创建属性文件对象
            Properties pro = new Properties();
            // 需要指定邮件的服务器地址，复制一下。推荐去复制，自己写容易写错了。
            //以qq邮箱为例子
            // 邮件服务器主机
            pro.setProperty("mail.host", "smtp.163.com");
            // 邮件传输协议
            pro.setProperty("mail.transport.protocol", "smtp");
            // 设置邮件发送需要认证
            pro.put("mail.smtp.auth", "true");
            // 连接邮件的服务器，会话
            Session session = Session.getDefaultInstance(pro);
            // 获取到传输对象
            transport = session.getTransport();
            // 校验账号和密码（该密码不是QQ号的密码），授权码
            // 是固定，必须传入授权码
            //在这里两个参数，第一个参数是你的邮箱，第二个参数是授权码
            //第一个参数不需要加后缀
            transport.connect("y1357040971", "WSNXGQUBFUWLSSBK");//WSNXGQUBFUWLSSBK

            // =============================================
            // 2. 构建出一封邮件（设置收件人、设置主题和设置正文）
            // 有邮件的类
            MimeMessage message = new MimeMessage(session);
            // 设置发件人
            //这里的参数是发件人邮箱
            message.setFrom(new InternetAddress("y1357040971@163.com"));

            // 设置收件人
            // Message.RecipientType.TO 表示收件人
            // Message.RecipientType.CC 表示抄送给XXX
            // Message.RecipientType.BCC 表示暗送
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(email));

            // message.setRecipient(Message.RecipientType.CC,new InternetAddress(""));

            // 设置主题
            message.setSubject("主题");
            // 设置正文
            message.setContent("你的注册验证码为：" + code, "text/html;charset=UTF-8");

            // =============================================
            // 3. 发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            System.out.println("发送成功");

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            // 关闭连接
            try {
                transport.close();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
        return true;
    }
}
